iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 7
1
Software Development

30天完成家庭任務平台系列 第 7

30天完成家庭任務平台:第七天

  • 分享至 

  • xImage
  •  

在家庭任務平台中使用了許多Eloquent提供的關係,例如:

  • User和Profile是一對一的關係(One To One):每個使用者可以擁有一個人資料,一個人資料屬於一個使用者 。

  • User和Project是一對多的關係(One To Many):每個使用者可以創建多個計畫,一個計畫屬於一個使用者。

  • User和Task是一對多的關係(One To Many):每個使用者可以被指派多個任務,一個任務指派給一個使用者。

  • User和Activity是一對多的關係(One To Many):每個使用者可以產生多個行為,一個行為是由一個使用者產生。

    但是一個使用者所創建的計畫可以邀請其他人參加,所以一個計畫可以擁有許多參加計畫的成員,而一個成員可以參與多種計畫,所以一對多或一對一的關係並不適用,需要多對多的關係。

一對一、一對多、多對多關係的簡化欄位表格如下:

  1. 一對一:簡化資料表:profiles

    id user_id avatar

    1|2|x.jpg
    2|1|y.jpg
    3|3|z.jpg

  2. 一對多:簡化資料表:projects

    id owner_id(user_id) title

    1|2|台南行
    2|1|練習開車
    3|1|寫文章
    4|1|大賣場採買

  3. 多對多:簡化資料表:member_project,在多對多的關係時,會多產生一個資料表(intermediate table)將不同表連結在一起

    user_id project_id

    1|1
    3|1
    2|2
    3|3

    但是這些連結方式會在activities的資料表遇見麻煩,因為我們需要紀錄使用者對兩種Model計畫和任務進行增修的活動,如果採用上述的方式,由於對應的Model是固定的,我們就必須要產生兩個資料表紀錄同一種概念,產生明顯地重複。

    • 簡化資料表:activities(project_user)
    id user_id project_id change

    1|2|1|create_project

    • 簡化資料表:activities(task_user)
    id user_id task_id change

    1|3|1|create_task

    如果遇到需要對更多不同Model的活動進行紀錄,就會產生更多的資料表,但是僅有些微的差異,常見的日常舉例有:使用者可以喜歡貼文,喜歡評論,喜歡影片等等,在這種情況下,就會多增加資料表。因此,Eloquent提供了Polymorphic系列,讓同一概念的資料表可以對應到不同的Model,而無需一直增加資料表。

所以接下來的幾天我們要來介紹三大Eloquent關係系列,分別為:

  1. One To One/ One To Many/ Many To Many
  2. One To One (Polymorphic)/ One To Many (Polymorphic)/ Many To Many (Polymorphic)
  3. Has One Through/ Has Many Through

參考文件:
Eloquent: Relationships
Laracast:Eloquent Relationships


上一篇
30天完成家庭任務平台:第六天
下一篇
30天完成家庭任務平台:第八天
系列文
30天完成家庭任務平台30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言